home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 2.1 KB | 106 lines |
- 10 ' ***************************
- 20 ' ** AMAZE **
- 30 ' ***************************
- 40 '
- 50 CLEAR
- 60 SCREEN 1
- 70 CLS
- 80 KEY OFF
- 90 COLOR 0,1
- 100 LOCATE 12,12
- 110 PRINT "*** AMAZE ***"
- 120 GOSUB 760
- 130 CLS
- 140 LOCATE 7,1
- 150 INPUT "How many paths wide ";WIDE
- 160 IF WIDE > 0 AND WIDE < 160 THEN 200
- 170 PRINT "Valid range is 1 to 159
- 180 BEEP
- 190 GOTO 150
- 200 INPUT "How many paths high ";HIGH
- 210 IF HIGH > 0 AND HIGH < 100 THEN 260
- 220 PRINT "Valid range is 1 to 99
- 230 BEEP
- 240 GOTO 200
- 250 '
- 260 WINC = 320\(WIDE+1)
- 270 HINC = 200\(HIGH+1)
- 280 CLS
- 290 LINE (0,0)-(WIDE*WINC,HIGH*HINC),,B
- 300 COUNT = WIDE * HIGH
- 310 FOR I = 0 TO COUNT
- 320 PTR = (PTR+997) MOD COUNT
- 330 X = INT(PTR/HIGH)
- 340 Y = PTR - X * HIGH
- 350 X = X * WINC
- 360 Y = Y * HINC
- 370 IF POINT(X,Y) THEN 600
- 380 DIR = INT(4*RND+1)
- 390 DIR2 = DIR
- 400 DIR = DIR MOD 4 + 1
- 410 XN = ((DIR=1)-(DIR=3)) * WINC + X
- 420 YN = ((DIR=2)-(DIR=4)) * HINC + Y
- 430 IF POINT(XN,YN) = 0 THEN 550
- 440 LINE (X,Y)-(XN,YN)
- 450 DIR = INT(4*RND+1)
- 460 FOR K = 1 TO 4
- 470 DIR = DIR MOD 4 + 1
- 480 XN = ((DIR=1)-(DIR=3)) * WINC + X
- 490 YN = ((DIR=2)-(DIR=4)) * HINC + Y
- 500 IF POINT(XN,YN) THEN 590
- 510 LINE (X,Y)-(XN,YN)
- 520 X = XN
- 530 Y = YN
- 540 GOTO 450
- 550 IF DIR <> DIR2 THEN 580
- 560 X = XN
- 570 Y = YN
- 580 GOTO 400
- 590 NEXT K
- 600 NEXT I
- 610 '
- 620 ' Open the doors on each side
- 630 Y = (HIGH \ 2) * HINC
- 640 LINE (0,Y)-(0,Y+HINC),0
- 650 LINE (WIDE*WINC,Y)-(WIDE*WINC,Y+HINC),0
- 660 '
- 670 ' Done ...
- 680 ' If user presses "p" then dump graphics to printer,
- 690 ' Else draw another maze whenever any key is pressed.
- 700 K$ = INKEY$
- 710 IF K$ = "" THEN 700
- 720 IF K$ = "p" OR K$ = "P" THEN GOSUB 870
- 730 GOTO 130
- 740 '
- 750 ' Wait for user and be randomizing the generator
- 760 LOCATE 25,9
- 770 PRINT "Press any key to begin";
- 780 RNDM = RND
- 790 K$ = INKEY$
- 800 IF K$ = "" THEN 780
- 810 RANDOMIZE 64000 * RND - 32000
- 820 LOCATE 25,1
- 830 PRINT SPACE$(39);
- 840 RETURN
- 850 '
- 860 ' Subroutine to dump graphic maze to printer
- 870 DEF SEG = &HB800
- 880 E$ = CHR$(27)
- 890 WIDTH "LPT1:",255
- 900 LPRINT E$+"1";
- 910 LPRINT E$+"W" + CHR$(1);
- 920 FOR ROW = 0 TO 79
- 930 A$ = ""
- 940 FOR COL = 99 TO 0 STEP -1
- 950 LOCA$ = CHR$(PEEK(COL * 80 + ROW))
- 960 LOCB$ = CHR$(PEEK(COL * 80 + ROW + &H2000))
- 970 A$ = A$ + LOCB$ + LOCB$
- 980 A$ = A$ + LOCA$ + LOCA$
- 990 IF COL <> 49 THEN 1020
- 1000 LPRINT E$+"K"+CHR$(144)+CHR$(1)+A$;
- 1010 A$ = ""
- 1020 NEXT COL
- 1030 LPRINT A$
- 1040 NEXT ROW
- 1050 RETURN
-